package com.lagou.dao.impl;

import com.lagou.dao.CourseContentDao;
import com.lagou.pojo.Course;
import com.lagou.pojo.Course_Lesson;
import com.lagou.pojo.Course_Section;
import com.lagou.utils.DateUtils;
import com.lagou.utils.DruidUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;

import java.sql.SQLException;
import java.util.List;

/**
 * 课程内容管理 DAO层的实现类
 */

public class CourseContentDaoImpl implements CourseContentDao {
    @Override
    public List<Course_Section> findSectionAndLessonByCourseId(int courseId) {
        QueryRunner qr = new QueryRunner(DruidUtils.getDataSource());

        String sql = "  SELECT \n" +
                "id, course_id, section_name, description, order_num, STATUS\n" +
                "FROM course_section\n" +
                "WHERE course_id = ? ";

        try {
            List<Course_Section> sectionList = qr.query(sql, new BeanListHandler<Course_Section>(Course_Section.class), courseId);


            // 根据章节id 查询课时信息
            for (Course_Section section : sectionList ){

                //调用方法 获取章节对应的 课时
                List<Course_Lesson> lessonList = findLessonBySectionId(section.getId());

                //将课时数据 封装到章节对象中
                section.setLessonList(lessonList);


            }

            return sectionList;





        } catch (SQLException e) {
            e.printStackTrace();
        }


        return null;
    }

    //根据章节id 查询课程 信息
    @Override
    public List<Course_Lesson> findLessonBySectionId(int sectionId) {
        QueryRunner qr = new QueryRunner(DruidUtils.getDataSource());

        String sql = "SELECT\n" +
                "id, course_id, section_id, theme, duration, is_free, order_num, STATUS\n" +
                "FROM course_lesson WHERE section_id =  ? ";

        try {
            List<Course_Lesson> lessonList = qr.query(sql, new BeanListHandler<Course_Lesson>(Course_Lesson.class), sectionId);
            return lessonList;
        } catch (SQLException e) {
            e.printStackTrace();
        }

        return null;
    }



    //跟根据课程id  回显课程信息
    @Override
    public Course findCourseByCourseId(int courseId) {

        QueryRunner qr = new  QueryRunner(DruidUtils.getDataSource());

        String sql  = " select id, course_name from course where id = ? ";

        try {
            Course course = qr.query(sql, new BeanHandler<Course>(Course.class), courseId);
            return course;
        } catch (SQLException e) {
            e.printStackTrace();
        }

        return null;
    }

    //保存章节信息
    @Override
    public int saveSection(Course_Section section) {
        QueryRunner qr = new QueryRunner(DruidUtils.getDataSource());

        String sql = " insert into course_section ( course_id, section_name, description, order_num, status , create_time, update_time ) values (?, ?, ?, ?, ?, ?, ?) ";

        Object[] param = { section.getCourse_id(), section.getSection_name(), section.getDescription(), section.getOrder_num(), section.getStatus(), section.getCreate_time(), section.getUpdate_time()  };

        try {
            int row = qr.update(sql, param);
            return row;
        } catch (SQLException e) {
            e.printStackTrace();
        }

        return 0;
    }


    //修改章节
    @Override
    public int updateSection(Course_Section section) {
        QueryRunner qr = new QueryRunner(DruidUtils.getDataSource());

        String sql = "UPDATE course_section SET\n" + "section_name = ?,\n" + "description = ?,\n" + "order_num = ?,\n" + "update_time = ? WHERE id = ?;";

        Object[] param = {section.getSection_name(), section.getDescription(), section.getOrder_num(), section.getUpdate_time(), section.getId()};

        try {
            int row = qr.update(sql, param);
            return row;
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return 0;
    }

    @Override
    public int updateSectionStatus(int id, int status) {
        QueryRunner qr = new QueryRunner(DruidUtils.getDataSource());

        String sql = " update course_section set status = ?, update_time =  ?  where id = ?  ";

        Object[] param = { status, DateUtils.getDateFormart(), id};

        try {
            int row = qr.update(sql, param);
            return row;
        } catch (SQLException e) {
            e.printStackTrace();
        }

        return 0;
    }

    //保存课时信息
    @Override
    public int saveLesson(Course_Lesson lesson) {
        QueryRunner qr = new QueryRunner(DruidUtils.getDataSource());
        String sql = " INSERT INTO course_lesson ( course_id, section_id, theme, duration, is_free, order_num ) VALUES( ?, ?, ?, ?, ?, ? )  ";
        Object[] param = { lesson.getCourse_id(), lesson.getSection_id(), lesson.getTheme(), lesson.getDuration(), lesson.getIs_free(), lesson.getOrderNum() };

        try {
            int row = qr.update(sql, param);
            return row;
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return 0;
    }

    //修改课时信息
    @Override
    public int updateLesson(Course_Lesson lesson) {
        QueryRunner qr = new QueryRunner(DruidUtils.getDataSource());
        String sql = "UPDATE course_lesson SET course_id = ?, section_id = ?, theme = ?, duration = ?, is_free = ?, order_num = ? WHERE id = ?  ";

        Object[] param = { lesson.getCourse_id(), lesson.getSection_id(), lesson.getTheme(), lesson.getDuration(), lesson.getIs_free(), lesson.getOrderNum(), lesson.getId() };

        try {
            int row = qr.update(sql, param);
            return row;
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return 0;
    }
}
